package com.ato.IO;

import org.junit.Test;

import java.io.*;

/**
 * @author wangjing
 * @create 2021--12--16--19:52
 * 对象流 序列化 反序列化  ： 把内存中的兑现 比如String 写出    用处：网络传输
 * ObjectInputStream   ObjectOutStream
 * 注意： 不能给static 和transient 修饰的变量
 * <p>
 * 可序列化的： Serializable
 */
public class IOobject {
    @Test
    public void test1() {
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("ObjectOutputStream.txt"));
            oos.writeObject(new SerializeablePerson("王晶", 28));
            oos.flush();
//            直接看是看不懂的，这个其实就是序列化了，要看那么就是反序列化了。
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    @Test
    public void test12() {
        ObjectInput ois = null;
        try {
//            反序列化，其实就是将序列化后的文件或者网络传输的内容 还原成java的数据类型，比如基本数据类型，Object等
            ois = new ObjectInputStream(new FileInputStream("ObjectOutputStream.txt"));
            Object o = ois.readObject();
//            注意：一般是规定好了是相同的类型的，所以可以强转
            SerializeablePerson sp = (SerializeablePerson) o ;

            System.out.println(sp);
//            直接看是看不懂的，这个其实就是序列化了，要看那么就是反序列化了。
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
